package com.bt.lms.ui.page.sys.role.action;

import com.bt.lms.constants.SysBizTypeConstant;
import com.bt.lms.ui.page.sys.utils.Encode;
import com.bt.lms.ui.page.sys.ServerInfo;
import com.bt.lms.network.msg.ReqMsg;
import com.bt.lms.ui.page.sys.vo.RoleTableViewVo;
import com.bt.lms.ui.vo.PageSkipInfo;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Alert;
import javafx.scene.layout.Pane;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 用户列表的添加角色用户按钮的事件
 */
@Deprecated
public class RLAddUserBtnAction implements EventHandler<ActionEvent> {

    /**
     * 角色列表视图
     */
    private final RoleTableViewVo roleTableViewVo;

    /**
     * 界面跳转数据
     */
    private final PageSkipInfo pageSkipInfo;

    public RLAddUserBtnAction(RoleTableViewVo roleTableViewVo, PageSkipInfo pageSkipInfo) {
        this.roleTableViewVo = roleTableViewVo;
        this.pageSkipInfo = pageSkipInfo;
    }

    /**
     * 事件实现
     * 1.跳转界面（个人部分跳转 + 位置变化）
     *
     * @param event the event which occurred
     */
    @Override
    public void handle(ActionEvent event) {

        //组装网络消息包
        ReqMsg reqMsg = Encode.encodeToMsg(roleTableViewVo, SysBizTypeConstant.USER_ROLE_NOT_USER);
        byte[] bytes = reqMsg.toBytes();
        //组网
        Socket socket = pacNet();
        //发送
        boolean res = sendReq(socket, bytes);
        if (res) {
            //成功发送，程序结束
            finish();
        } else {
            String failStr = "网络波动，请稍候重试。";
            hintFrame(failStr);//提示框
        }
    }

    /**
     * 程序结束
     */
    private void finish() {
        //界面跳转数据
        Pane pane = pageSkipInfo.getPane();
        Integer index = pageSkipInfo.getIndex();

//        PageAddUser pageAddUser = new PageAddUser(coding, pageSkipInfo);
//        ObservableList<Node> children = pane.getChildren();
//        children.set(index, pageAddUser);
    }

    /**
     * 发送请求
     *
     * @param socket 客户端连接
     * @param bytes  要发送的数据
     * @return 发送结果
     */
    private boolean sendReq(Socket socket, byte[] bytes) {


        try {
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write(bytes);
            outputStream.flush();

            //关闭资源
            outputStream.close();
            socket.close();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return true;

    }

    /**
     * 组网
     *
     * @return 网
     */
    private Socket pacNet() {

        String ip = ServerInfo.IP;
        int port = ServerInfo.PORT;

        Socket socket;
        try {
            socket = new Socket(ip, port);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return socket;
    }

    /**
     * 程序终止
     * 弹窗提示
     *
     * @param result 终止提示
     */
    private void hintFrame(String result) {
        //提示弹窗
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        //错误提示
        alert.setTitle("失败");
        alert.setHeaderText(null);
        alert.setContentText(result);
        alert.showAndWait();
    }
}

